for(var i=0;i<5;i++){
    setTimeout(() => {
        console.log(new Date,i)
    }, 1000);
}


var output=function(i){
    setTimeout(() => {
        console.log(new Date,i)
    }, 1000);
}
for(let i=0;i<5;i++){
    output(i)
}

console.log(new Date,i);

// 亮点
// 1. let 块级作用域
// 2. 立即执行  IIFE 
// 3. setTimeout 第三个参数
// 4. 传参 ， i基础数据类型
// 异步

0,1,2,3,4,5

for(var i=0;i<5;i++){
    setTimeout((i) => {
        console.log(new Date,i)
    }, 1000,i);
}
setTimeout(() => {
    console.log(new Date,i)   // 再加一个 setTimeout
}, 1000*i);

// Promise.all

const task=[];
for(var i=0;i<5;i++){
    ((j)=>{
        task.push(new Promise((resolve)=>{
            setTimeout(() => {
                console.log(new Date,j)
                resolve(j);
            }, 1000*j);
        }))
    })(i)
}
Promise.all(task)
.then(()=>{
    console.log(new Date,i);
})

// es7
// async await
// await后 要跟一个promise

const sleep =(timeoutMS)=>new Promise((resolve)=>{
    setTimeout(resolve, timeoutMS);
});

(async ()=>{
    for(var i=0;i<5;i++){
        // 异步问题
        await sleep(1000);
        console.log(new Date,i);
    }
    await sleep(1000);
    console.log(new Date,i);
})()